A multitude of different fixed and mobile telecommunication/datacommunication services have been developed, in addition to the traditional voice calling and short text messaging. For example, Internet browsing has rapidly become very popular, and in recent years the wireless domain has converged with the Internet. Mobile terminals are now available having functionality for connecting to the Internet over a wireless access network to obtain information and services from sites and servers located anywhere throughout the world. Moreover, new technologies for mobile communication are introduced, providing greater network capacity and higher transmission bitrates. In particular, GPRS (General Packet Radio Service) and WCDMA (Wideband Code Division Multiple Access) networks are currently emerging for enabling wireless data services that require a wide range of different data rates. The data communicated in many new services may include voice, text, images, audio files and video files in various different formats and combinations.
By way of example, mobile instant messaging and presence services are rapidly becoming popular. Instant messaging is known from the world of fixed PCs (Personal Computers), including message status reporting and various group and contact list features. Presence services involve information on the location of mobile terminals and enable users to receive messages according to their profile and availability. A user profile can be personal and may be defined by preferences, interests and hobbies, as well as more temporary factors, such as user availability and current moods. Messages and content services can also be delivered depending on the present location, availability and terminal capabilities. It can be readily understood that such services require the storage of considerable amounts of retrievable user-specific data, which in many cases need to be frequently updated due to their dynamic nature.
The demands for telecommunication services are thus increasing rapidly, and service providers are established all over the world, equipped with hardware and software resources to meet these demands. In particular, means for processing service requests and data, as well as means for storing huge amounts of data are needed. Consequently, a service provider must be able to efficiently control the processing and storing means which are typically comprised in a system of different service components such as servers. The expression “server” will be used hereafter to represent any hardware and/or software for storing and/or processing data. A server may be configured to provide one or more specific services.
As seen from the examples given above, different types of stored data may be of a very dynamic nature, needing frequent updatings. Moreover, server systems must be reconfigured from time to time as the needs change for processing and storing, e.g., due to changing demands of service requests, added or removed subscribers and the introduction, modification or deletion of services. The workload on servers often increases rapidly so that individual servers are easily overloaded, at least for a short time, in particular popular web servers. To overcome overloading problems in servers, basically two solutions are available.
Firstly, an existing server may be upgraded to increase its computing and/or storing capabilities. However, the server will soon be overloaded again if the amount of service requests and/or needs for storage continue to increase, requiring further upgrading, which can be complex and costly to perform.
Secondly, it is possible to add further servers to meet a higher load. The concept of virtual servers has been proposed to provide load sharing between plural servers. A virtual server is a scalable server built on a cluster of real servers, which is transparent to end users such that the users see only a single virtual server. The front-end of the real servers is a node, sometimes called “load balancer”, configured to schedule service requests to the different real servers. Scalability is achieved by transparently adding or removing a server in the cluster.
For an Internet service provider or the like controlling a plurality of servers, processing and storing load must be shared between the servers. This is necessary in order to efficiently utilise available computing and storing resources, and to handle hotspots and avoid bottlenecks. As mentioned above, large amounts of data must be stored and should also be easy to find and retrieve. Furthermore, it must be possible to efficiently execute resource demanding processing tasks, requiring one or more computers. In order to handle large amounts of the same or similar computing requests, it is quite common that these requests must be shared between plural computers.
It is thus a problem to efficiently distribute processing and storing load between a plurality of servers, yet enabling easy retrieval of stored data. In current solutions involving the distribution of data to be stored or the processing of data, a server is often allocated to a client upon a login request. The allocation scheme used for selecting a server is normally based on the current load on a predetermined set of servers, such that the server having the lowest current load, with respect to memory resources and/or CPU (Central Processing Unit) capability, etc, is selected for the client. Server allocation is typically performed by using a load manager node or the like.
The most simple current solution for load sharing is a “Round Robin” allocation scheme. Further load sharing solutions are known which are more complex, such as “Weighted Round Robin”, “Least Connection”, “Weighted Least Connection”, “Locality Based Least Connection”, “Destination Hashing” and “Source Hashing”.
However, the solutions mentioned above are relatively complex to use, resulting in problems related to supervision, operation and maintenance, since it is difficult to predict where data will be distributed and stored, as well as where specific computing-intensive tasks will actually be performed. Another problem is that it is sometimes not possible to perform linear scaling of a server system, e.g., expanding resources by adding servers to the system.
Furthermore, it may be difficult to find and retrieve data being stored in one or more servers if no reference or pointer to the data is properly stored somewhere. The client performing the login may have a proper reference to the data, but no other client or device can find and retrieve the data without the reference, unless so-called “brute force searches” are used among a set of servers.
“Round Robin” scheduling is only suitable for distributing processing load, since processing tasks are not affected by in which server they are performed. On the other hand, in data storage distribution, it must be possible to find and retrieve data stored in one of several servers, which cannot be done by using Round Robin but requires the use of pointers or references as described above. Furthermore, a common basic problem with some of the other scheduling methods mentioned above, is that they use IP (Internet Protocol) addressing for scheduling. Since a plurality of clients can reside behind a single IP address (proxy, NAT, etc.), these can neither be used for data distribution nor load sharing.